# ThoughtWorks - Problema dos Hoteis
Problema dos Hoteis

## Descrição das classes
As classes essenciais para o projeto se encontram na pasta **_classes_**, são elas:

### AppHotel
Essa classe é responsável por gerenciar o cadastro de hoteis, nela é possível solicitar o calculo de orçamentos e buscar um hotel com menor preço.
    
### Budget
Essa classe é responsável por montar os orçamentos para cada hotel que foi cadastrado.
    
### Calculator
Essa classe é responsável por fazer o cálculo do preço final
    
### Hotel
Classe para representar um hotel

### Price
Classe para representar um agrupamento de preços para clientes regulares e clientes fidelidade
    
### Rate
Classe para representar um agrupamento de taxas de preços para dias da semana e finais de semana

### SearchEngine
Essa classe é responsável por buscar hoteis, no atual momento, busca hoteis com menor preço

### Stay
Essa classe representa uma estadia


## Observações importantes
- Um arquivo principal (_main.js_) é responsável por ler o arquivo **.txt** de entrada que informa os dados da estadia e o tipo do cliente. A aplicação é iniciada nesse arquivo.
- Um arquivo (**_db/index.js_**) com todos os dados dos hoteis foi criado para prever a possibilidade de adicionar novos hoteis que a rede de hoteis possa vir a ter no futuro.
- Uma pasta contendo os testes unitários para algumas funções implementadas nas classes principais se encontra na raiz do projeto. Para executar os testes siga as instruções no final desse arquivo README.md.
- Foi necessário criar uma classe Price pois o agrupar esses valores de fidelidade e regular seriam melhores trabalhados na classe Rate, que também agrupa os preços em finais de semana e dias utéis.
- A classe Search apenas organiza os hoteis pelo orçamento de forma crescente, ela necessáriamente não faz uma busca, mas sim uma ordenação.


## Instalar NodeJS
Para executar esse projeto é necessário instalar o nodejs

## Instalar as dependencias

> $ cd thoughtworks
> 
> $ npm install

As dependencias desse projeto são utilizadas para criação dos testes unitários, são elas:
- mocha
- chai

## Como iniciar o programa

> $ cd thoughtworks
> 
> $ node main.js _url-do-arquivo_

Exemplo:
> $ node main.js _example.js_

## Como rodar os testes unitários

> $ cd thoughtworks
> 
> $ npm test